package com.yize.jvm.proxy;

import org.junit.Test;

/**
 * 代理模式
 * 为其他对象提供一个代理以控制对某个对象的访问。代理类主要负责为委托了（真实对象）预处理消息、过滤消息、传递消息给委托类，代理类不现实具体服务，而是利用委托类来完成服务，并将执行结果封装处理。
 *
 * 其实就是代理类为被代理类预处理消息、过滤消息并在此之后将消息转发给被代理类，之后还能进行消息的后置处理。代理类和被代理类通常会存在关联关系(即上面提到的持有的被带离对象的引用)，代理类本身不实现服务，而是通过调用被代理类中的方法来提供服务。
 *
 * 静态代理
 * 创建一个接口，然后创建被代理的类实现该接口并且实现该接口中的抽象方法。之后再创建一个代理类，同时使其也实现这个接口。在代理类中持有一个被代理对象的引用，而后在代理类方法中调用该对象的方法。
 *
 * 作者：只是肿态度
 * 链接：https://www.jianshu.com/p/9bcac608c714
 * 来源：简书
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class StaticProxy {
    @Test
    public void test(){
        Hello hello=new HelloProxy();//Hello代理了HelloProxy,HelloProxy被代理类Hello代理了
        hello.sayHello();
    }
}
